//////////////////////////////////////////////////////////////

//HEADER FILE: listas.h

//PROCESO PLANIFICADOR DE DISCO

//Autor: Pablo Bergna

//////////////////////////////////////////////////////////////

#ifndef LISTAS_H_
#define LISTAS_H_

#define LISTA_VACIA 0
#define LISTA_NO_VACIA 1

#define ADELANTE 1
#define ATRAS 0

#include "todo_incluido.h"

//EJEMPLO DE UNA LISTA DE 5 ELEMENTOS:
//ULTIMO<->ANTERIOR<->ACTUAL<->PROXIMO<->PRIMERO
typedef struct td_nodo_lista{
	void* datos;
	struct td_nodo_lista* proximo;
	struct td_nodo_lista* anterior;
}__attribute__((packed)) td_nodo_lista;

typedef struct td_lista{
	td_nodo_lista* primero;
	td_nodo_lista* ultimo;
	td_nodo_lista* actual;
	uint16_t tam_bloque;
	uint8_t (*func_comparacion)(void*,void*);
}__attribute__((packed)) td_lista;



uint8_t crear_lista(td_lista*,uint16_t,void*);
uint8_t lista_vacia (td_lista*);
void destruir_lista (td_lista*);
void destruir_nodo_actual(td_lista*);
uint8_t agregar_nodo_lista(td_lista*,void*,uint8_t);
uint8_t sacar_nodo_actual(td_lista*,void*);
uint8_t obtener_nodo_actual(td_lista*,void*);
uint8_t mover_actual_lista(td_lista*,uint8_t);
uint8_t buscar_nodo_lista(void*,td_lista*);
uint8_t comparar_nodos_lista(void*,void*,td_lista*);


#endif /* LISTAS_H_ */
